from django.core.files.storage import Storage
from django.conf import settings


# 1:自定义的文件存储后端要继承django默认的存储后端Storage
from fdfs_client.client import Fdfs_client
from rest_framework import serializers


class FastDFSStorage(Storage):

    def _open(self, name, mode="rb" ):
        # 打开django本地文件
        pass

    def _save(self, name, image_obj, max_length=None):
        # 上传图片
        conn = Fdfs_client('./meiduo_mall/settings/client.conf')
        res = conn.upload_by_buffer(image_obj.read())
        if res is None:
            raise serializers.ValidationError('上传fdfs失败！')
        file_id = res['Remote file_id']

        # 注意：_save方法返回值就是当前字段，存储在mysql中的文件id
        return file_id

    def exists(self, name):
        # 功能：判断上传的文件在Django本地是否重复
        # True：表示重复
        # Fales：表示不重复
        return False

    def url(self, name):
        # 返回"http://image.meiduo.site:8888/" + 图片在数据库中存储的地址
        return settings.FDFS_BASE_URL + name


